stackでの文字式評価

19 6月

stack で解答を評価するときに,ルート記号の中に文字が入った場合に苦労しています。
例を挙げると \(\displaystyle \sqrt{\frac{2 \, h}{g}}\) を正解とするとき,\(\displaystyle \frac{\sqrt{2 \, h}}{\sqrt{g}}\) が代数等価の判定で正解になりません。

maxima でいくつか試してみました。変数に対する仮定を入れてみました。まず入力ですが,下記のように変数 h, g に正であるという仮定を入れる前と後で変化があるかどうか試してみます。

    a:sqrt(2*h/g);
    b:sqrt(2*h)/sqrt(g);
    a-b;
    assume(h>0,g>0);
    a:sqrt(2*h/g);
    b:sqrt(2*h)/sqrt(g);
    a-b;

実行結果は下記。

    (%i3) a:sqrt(2*h/g)
    (%o3) sqrt(2)*sqrt(h/g)
    (%i4) b:sqrt(2*h)/sqrt(g)
    (%o4) sqrt(2)*sqrt(h)/sqrt(g)
    (%i5) a-b
    (%o5) sqrt(2)*sqrt(h/g)-sqrt(2)*sqrt(h)/sqrt(g)
    (%i6) assume(h > 0,g > 0)
    (%o6) [h > 0,g > 0]
    (%i7) a:sqrt(2*h/g)
    (%o7) sqrt(2)*sqrt(h)/sqrt(g)
    (%i8) b:sqrt(2*h)/sqrt(g)
    (%o8) sqrt(2)*sqrt(h)/sqrt(g)
    (%i9) a-b
    (%o9) 0

変数に正という仮定を入れる前は同値と判定されなかった式が,仮定をした後は同値となりました。何か対策が必要です。